<?php
/**
 * FerramentaService
 *
 * Acessa o Dao e o Repositorio de Ferramenta e disponibiliza a outras
 * classes metodos (Servicos) que precisam.
 */
class FerramentaService extends Model {

    /**
     * @var FerramentaService
     */
    private $ferramentaDao;

    public function injectDependencies() {
        $this->ferramentaDao = FerramentaDao::getInstance();
    }

    /**
     * @method  getAllTools
     *
     * Lista todas as ferramentas do sistema
     *
     * @return  array
     * @since   2011-12-06
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     */
    public function findAll() {
        return $this->ferramentaDao->findAll();
    }
    /**
     * @method  saveToolsStatus
     *
     * Atualiza os status das ferramentas do usuario logado.
     *
     * @param   array    $ArFerramentasHabilitadas      Array com as ferramentas que serao habilitadas e desabilitadas
     *          @example    array('Insert'=> array(1,3), 'Delete'=>array(2))
     *
     * @since   2012-12-25
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     * @return  boolean
     */
    public function saveToolsStatus($ArFerramentasHabilitadas) {
        return $this->ferramentaDao->updateEnabledTools($ArFerramentasHabilitadas);
    }
    /**
     * @method  getIdToolsUpdateList
     *
     * Com base nas ferramentas habilitadas pelo usuario na ultima request,
     * e as ferramentas carregadas no usuario logado, este metodo ira verificar
     * quais ferramentas foram habilitadas e desabilitadas na ultima operacao
     *
     * @param   array   $ArFerramentasHabilitadas      Ferramentas habilitadas pelo usuario na ultima request
     * @param   array   $ArFerramentasAtuais           Ferramentas habilitadas pelo usuario atualmente
     *
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     * @return  array
     * @since   2012-12-25
     */
    public function getIdToolsUpdatedList($ArFerramentasHabilitadas, $ArFerramentasAtuais) {
        $ArDadosFerramentas = array( 'Delete' => array(), 'Insert' => array() );
        $ArDadosFerramentas['Delete'] = $this->getDisabledTools($ArFerramentasHabilitadas, $ArFerramentasAtuais);
        $ArDadosFerramentas['Insert'] = $this->getEnabledTools($ArFerramentasHabilitadas, $ArFerramentasAtuais);
        return $ArDadosFerramentas;
    }
    /**
     * @method  getEnabledTools
     *
     * Verifica quais ferramentas foram inseridas na ultima request.
     *
     * @param   array   $ArFerramentasHabilitadas      Ferramentas habilitadas pelo usuario na ultima request
     * @param   array   $ArFerramentasAtuais           Ferramentas habilitadas pelo usuario atualmente
     *
     * @since   2011-12-25
     * @return  array
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     */
    public function getEnabledTools($ArFerramentasHabilitadas, $ArFerramentasAtuais) {
        $ArEnabledTools = array();
        if( !empty($ArFerramentasHabilitadas) ) {
            foreach($ArFerramentasHabilitadas as $IDFerramenta) {
                if( $this->isEnable($IDFerramenta, $ArFerramentasAtuais) ) {
                    $ArEnabledTools[] = $IDFerramenta;
                }
            }
        }
        return $ArEnabledTools;
    }
    /**
     * @method  getDisabledTools
     *
     * Verifica quais ferramentas foram desabilitadas na ultima request
     *
     * @param   array   $ArFerramentasHabilitadas      Ferramentas habilitadas pelo usuario na ultima request
     * @param   array   $ArFerramentasAtuais           Ferramentas habilitadas pelo usuario atualmente
     *
     * @return  array
     * @since   2011-12-25
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     */
    public function getDisabledTools($ArFerramentasHabilitadas, $ArFerramentasAtuais) {
        $ArDisabledTools = array();
        if( !empty($ArFerramentasAtuais) ) {
            foreach($ArFerramentasAtuais as $tFerramenta) {
                if( !in_array($tFerramenta->getIDFerramenta(), $ArFerramentasHabilitadas) ) {
                    $ArDisabledTools[] = $tFerramenta->getIDFerramenta();
                }
            }
        }
        return $ArDisabledTools;
    }
    /**
     * @method  isEnable
     *
     * Verifica se a ferramenta foi habilitada na ultima request
     *
     * @param   int     $IDFerramenta           ID da ferramenta que sera verificada
     * @param   array   $ArFerramentasAtuais    Ferramentas habilitadas pelo usuario atualmente
     *
     * @return  boolean
     * @since   2011-12-25
     * @author  Richard Brandrao <richardsbrandao@gmail.com>
     */
    public function isEnable($IDFerramenta, $ArFerramentasAtuais) {
        if( !empty($ArFerramentasAtuais) ) {
            foreach( $ArFerramentasAtuais as $tFerramenta ) {
                 if( $tFerramenta->getIDFerramenta() == $IDFerramenta ) {
                     return false;
                 }
            }
        }
        return true;
    }
    /**
     * @method  enableTool
     *
     * Habilita a ferramenta no usuario no banco
     *
     * @param int $IDFerramenta     ID da ferramenta que sera habilitada
     * @param int $IDUsuario        ID do usuario que tera a ferramenta habilitada
     * @param Db $tMysqli           Manipulador de Banco de Dados do Sistema
     *
     * @since   2011-12-25
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     * @return  boolean
     */
    public function enableTool($IDFerramenta, $IDUsuario, &$tMysqli) {
        $this->ferramentaDao->enableTool($IDFerramenta, $IDUsuario, $tMysqli);
    }
    /**
     * @method  disableTool
     *
     * Desabilitada a ferramenta do usuario no banco
     *
     * @param int $IDFerramenta     ID da ferramenta que sera desabilitada
     * @param int $IDUsuario        ID do usuario que tera a ferramenta desabilitada
     * @param Db $tMysqli           Manipulador de Banco de Dados do Sistema
     *
     * @since   2011-12-25
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     * @return  boolean
     */
    public function disableTool($IDFerramenta, $IDUsuario, &$tMysqli) {
        return $this->ferramentaDao->disableTool($IDFerramenta, $IDUsuario, $tMysqli);
    }

    public function findBirthdays($ItDays) {
        return $this->ferramentaDao->findBirthdays($ItDays);
    }

}

?>
